#include "head.h"

// 菜单信息 - 登陆用
const wchar_t *title = L"普通用户菜单";
const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};

// 菜单信息 - 管理员用
const wchar_t *title_root = L"用户菜单";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户"};

// 菜单信息 - 普通用户用
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] = {
    L"购票退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单"};





// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = D_List_init();   // 航班信息
    Flight_sys.ADMIN_USER = S_List_init();    // 管理员账户信息
    Flight_sys.REGULAR_USER = S_List_init();  // 普通用户信息
    Flight_sys.SILVER_USER = S_List_init();   // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = S_List_init();     // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = S_List_init(); // 白金会员信息 (7折)

    // 从文件中导入数据
    D_List_file_scanf(Flight_sys.Flight_list);                  // 航班信息
    S_List_File_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    S_List_File_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    S_List_File_scanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    S_List_File_scanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    S_List_File_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)

    system("clear");
    return Flight_sys;
}

// 系统登录
U_data Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    // 开始登录
    U_data log_data = Log_in(list);
    return log_data;
}
int buy;
// 系统菜单
void Sys_menu(F_list *Flight_list, U_data log_data)
{
    // 分支
    int flag = 0;
    switch (log_data.grade)
    {
    case 1:
        // 管理员功能界面
        printf("欢迎管理员用户登陆\n");
        flag = display_menu(title_root, option_root, 4);
        break;
    default:
        // 普通用户功能界面
        printf("欢迎普通用户登陆\n");
        flag = display_menu(title_user, option_user, 5) + 4;
        break;
    }

    // 菜单选项分支处理
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        Add_Flight(Flight_list);
        break;
    case 2:
        // 管理员 - 修改航班
        Modify_Flight(Flight_list);
        D_List_file_print(Flight_list);
        break;
    case 3:
        // 管理员 - 修改普通用户
        Modify_User_Data();
        break;
    case 4:
        // 管理员 - 增加超级用户
        Add_Root_User();
        getchar();
        break;
    case 5:
        // 用户 - 购票退票
        Tickets(Flight_list, log_data);
        getchar();
        break;
    case 6:
        // 用户 - 余额充值
        Balance_Recharge_1(log_data);
        getchar();
        break;
    case 7:
        // 用户 - 查看航班
        View_Flight();
        getchar();
        break;
    case 8:
        // 用户 - 修改密码
        Change_Pwd_1(log_data);
        getchar();
        break;
    case 9:
        // 用户 - 我的订单
        My_Order(log_data);
        break;
    default:
        break;
    }
}


//航班的写入
void Add_Flight(F_list *list) {
    F_data data;
    puts("班次");
    scanf("%d", &data.id);
    puts("机型");
    scanf("%19s", data.flighttype);  // 限制输入长度为19
    puts("起点站");
    scanf("%19s", data.startcity);  // 限制输入长度为19
    puts("终点站");
    scanf("%19s", data.arrivecity);  // 限制输入长度为19
    puts("起飞时间");
    scanf("%d %d", &data.starttime[0], &data.starttime[1]);
    puts("到达时间");
    scanf("%d %d", &data.arrivetime[0], &data.arrivetime[1]);
    puts("飞行时间");
    scanf("%19s", data.flytime);  // 限制输入长度为19
    puts("票价");
    scanf("%d", &data.value);
    
    puts("载客量");
    scanf("%d", &data.maxNUM);
    
    puts("剩余座位");
    scanf("%d", &data.leftbuyersa);
    
    // 读取是否起飞
    puts("是否起飞(y/n)");
    getchar();  // 消耗掉上一次输入后的换行符
    scanf("%c", &data.whetherfly);

    D_List_insert(list,data, data.id);
    D_List_print(list);
}


//修改航班信息
void Modify_Flight(F_list *list)
{
    F_node *ptr = list->next;
    int num;
    printf("请输入要更改航班班次的id\n");
    scanf("%d",&num);
    for (size_t i = 0; ptr!=NULL; i++)
    {
        if(num==ptr->data.id)
        {
            puts("请输入修改后的航班信息：");
            puts("班次");
            scanf("%d", &ptr->data.id);
            puts("机型");
            scanf("%19s", ptr->data.flighttype);  // 限制输入长度为19
            puts("起点站");
            scanf("%19s", ptr->data.startcity);  // 限制输入长度为19
            puts("终点站");
            scanf("%19s", ptr->data.arrivecity);  // 限制输入长度为19
            puts("起飞时间");
            scanf("%d %d", &ptr->data.starttime[0], &ptr->data.starttime[1]);
            puts("到达时间");
            scanf("%d %d", &ptr->data.arrivetime[0], &ptr->data.arrivetime[1]);
            puts("飞行时间");
            scanf("%19s", ptr->data.flytime);  // 限制输入长度为19
            puts("票价");
            scanf("%d", &ptr->data.value);
            
            puts("载客量");
            scanf("%d", &ptr->data.maxNUM);
            
            puts("剩余座位");
            scanf("%d", &ptr->data.leftbuyersa);
            
            // 读取是否起飞
            puts("是否起飞(y/n)");
            getchar();  // 消耗掉上一次输入后的换行符
            scanf("%c", &ptr->data.whetherfly);

           // D_List_insert(list,ptr->data, pos);
            D_List_print(list);
        }
        ptr=ptr->next;
        if(ptr==list->next)
        {
            break;
        }
    }
}


//修改用户信息
void Modify_User_Data(void)
{
    FlightSystem Flight_sys = Sys_init();
    U_list *list = S_List_init();
    U_list *list_1=S_List_init();
    U_node *temp=list_1->next;
    list = S_List_merge(list, Flight_sys.ADMIN_USER     );    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER   );  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER    );   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER      );     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER  ); // 白金会员信息文件 (7折)
    //---------------------------
    char user[10];
    printf("请输入要修改的用户：");
    scanf("%s", user);
    U_node *ptr = S_List_find_name(list, user);
    if (ptr == NULL)
    {
        printf("未找到该用户，请重新输入。");
        return;
    }
    //-----------------------
    //S_List_clear(list);
    switch (ptr->data.grade)
    {
    case 2:
        S_List_File_scanf(list_1,REGULAR_FILE);
        break;
    case 3:
        S_List_File_scanf(list_1,SILVER_FILE);
        break;
    case 4:
        S_List_File_scanf(list_1,GOLD_FILE);
        break;
    case 5:
        S_List_File_scanf(list_1,PLATINUM_FILE);
        break;
    default:
        printf("modify user data error!");
        break;
    }
    temp = S_List_find_name(list_1, user);
    //-------
    printf("请选择要修改的内容：\n\t1. 用户名\n\t2. 密码\n\t3. 余额\n\t4. 退出修改\n");
    int choice;
    scanf("%d", &choice);
    switch (choice)
    {
    case 1:
        printf("请输入新的用户名：");
        scanf("%s", temp->data.name);
        break;
    case 2:
        printf("请输入新的密码：");
        scanf("%s", temp->data.passwd);
        break;
    case 3:
        printf("请输入新的余额：");
        scanf("%d", &temp->data.value);
        break;
    case 4:
        return;
    default:
        printf("无效的选择，请重新输入。");
        break;
    }

    switch (temp->data.grade)
    {
    case 2:
        S_List_File_print(list_1,REGULAR_FILE);
        break;
    case 3:
        S_List_File_print(list_1,SILVER_FILE);
        break;
    case 4:
        S_List_File_print(list_1,GOLD_FILE);
        break;
    case 5:
        S_List_File_print(list_1,PLATINUM_FILE);
        break;
    default:
        printf("modify user data error-1!");
        break;
    }
    S_List_free(&list);
}

void Add_Root_User()
{
    U_list *list=S_List_init();
    U_list *list_1=S_List_init();           //临时链表
    S_List_File_scanf(list_1,ADMIN_FILE);   //读取文件中的数据存放到链表中
    U_data data;

    data.grade=1;                           //管理员等级
    printf("请输入你要添加的用户信息：\n");
    puts("用户名:");
    scanf("%s",data.name);
    puts("密码:");
    scanf("%s",data.passwd);
    puts("余额:");
    scanf("%d",&data.value);
    S_List_insert(list,data,1);             
    S_List_merge(list,list_1);              //合并原管理员和新管理员
    S_List_File_print(list, ADMIN_FILE);
    S_List_print(list);
    S_List_free(&list);
}

// void Buy_Ticket()
// {

//     F_list *fly_list=D_List_init();
//     D_List_file_scanf(fly_list);
//     F_node *new_node=fly_list->next;


//     FlightSystem Flight_sys = Sys_init();
//     U_list *list = S_List_init();
//     U_list *list_1 = S_List_init();
//     U_node *temp=list_1->next;
//     // S_List_File_scanf(Flight_sys.ADMIN_USER,ADMIN_FILE);
//     S_List_File_scanf(Flight_sys.REGULAR_USER,REGULAR_FILE);
//     S_List_File_scanf(Flight_sys.SILVER_USER,SILVER_FILE);
//     S_List_File_scanf(Flight_sys.GOLD_USER,GOLD_FILE);
//     S_List_File_scanf(Flight_sys.PLATINUM_USER,PLATINUM_FILE);

//     // list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
//     list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
//     list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
//     list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
//     list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
//     //---------------------------
//     char user[128];

//     //-----------------------
//     //S_List_clear(list);
//     //char Level[128]; 
//     U_node *ptr = S_List_find_name(list, user);
//     // switch (ptr->data.grade)
//     // {
//     // case 2:
//     //     strcpy(Level, REGULAR_FILE);
//     //     break;
//     // case 3:
//     //     strcpy(Level, SILVER_FILE);
//     //     break;
//     // case 4:
//     //     strcpy(Level, GOLD_FILE);
//     //     break;
//     // case 5:
//     //     strcpy(Level, PLATINUM_FILE);
//     //     break;
//     // default:
//     //     break;
//     // }
//     // S_List_File_scanf(list, Level);

//     printf("请输入你的名字：\n");
//     scanf("%s", user);
//     ptr = S_List_find_name(list, user);
//     if (ptr == NULL)
//     {
//         printf("未找到该用户，请重新输入。");
//         return ;
//     }
//     else{
//         printf("找到 %s 啦！",ptr->data.name);
//     }
//     //ptr = S_List_find_name(list, user);
//     //-------
//     D_List_file_scanf(fly_list);
//     D_List_print(fly_list);
//     printf("请选择你要购买的航班 id：\n");
//     int choice;
//     scanf("%d", &choice);
//     while(1)
//     {
//         if(new_node->data.id==choice)
//         {
//             ptr->data.ticket[0]=new_node->data;
//             break;
//         }
//         new_node=new_node->next;
//         if(new_node==fly_list->next)
//         {
//             break;
//         }
//     }
    
//     S_List_print(list);

//     switch (ptr->data.grade)
//     {
//         case 2 :
//             S_List_File_scanf(list_1,REGULAR_FILE);

//             S_List_insert(list_1,ptr->data,1);
//             S_List_File_print(list_1,REGULAR_FILE);
//         break;
//             case 3 :
//             S_List_File_scanf(list_1,SILVER_FILE);

//             S_List_insert(list_1,ptr->data,1);
//             S_List_File_print(list_1,SILVER_FILE);
//         break;
//             case 4 :
//             S_List_File_scanf(list_1,GOLD_FILE);

//             S_List_insert(list_1,ptr->data,1);
//             S_List_File_print(list_1,GOLD_FILE);

//         break;
//             case 5 :
//             S_List_File_scanf(list_1,PLATINUM_FILE);

//             S_List_insert(list_1,ptr->data,1);
//             S_List_File_print(list_1,PLATINUM_FILE);
//         break;
//     default:
//             printf("ざござご\n");
//         break;
//     }
//     //S_List_File_print(list, Level);
//     S_List_free(&list);
//     S_List_free(&list_1);
//     return ;
// }


void Balance_Recharge()
{
    U_list *list = S_List_init();
    U_list *list_1 = S_List_init();
    int money;

    FlightSystem Flight_sys = Sys_init();
    // S_List_File_scanf(Flight_sys.ADMIN_USER,ADMIN_FILE);
    S_List_File_scanf(Flight_sys.REGULAR_USER,REGULAR_FILE);
    S_List_File_scanf(Flight_sys.SILVER_USER,SILVER_FILE);
    S_List_File_scanf(Flight_sys.GOLD_USER,GOLD_FILE);
    S_List_File_scanf(Flight_sys.PLATINUM_USER,PLATINUM_FILE);

    // list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    
    char user[128];
    printf("请输入你的名字：\n");
    scanf("%s",user);
    U_node *ptr= S_List_find_name(list,user);

    switch (ptr->data.grade)
    {
    case 2:
        S_List_File_scanf(list_1, REGULAR_FILE);
        break;
    case 3:
        S_List_File_scanf(list_1, SILVER_FILE);
        break;
    case 4:
        S_List_File_scanf(list_1, GOLD_FILE);
        break;
    case 5:
        S_List_File_scanf(list_1, PLATINUM_FILE);
        break;
    default:
        printf("你这人啊 ，满脑子都是自己呢！\n");
        break;
    }

    printf("请输入 充值 的余额 ：\n");
    U_node *L1=S_List_find_name(list_1,user);
    scanf("%d",&money);
    L1->data.value=L1->data.value+money;
    printf("充值成功！\n");
    switch (ptr->data.grade)
    {
        case 2:
            S_List_File_print(list_1,REGULAR_FILE);
            break;
        case 3:
            S_List_File_print(list_1,SILVER_FILE);
            break;
        case 4:
            S_List_File_print(list_1,GOLD_FILE);
            break;
        case 5:
            S_List_File_print(list_1,PLATINUM_FILE);
            break;
        default:
            printf("你可以吃 琼实鸟串：\n");
            break;
    }
    S_List_free(&list);
    S_List_free(&list_1);
}

//余额充值
void Balance_Recharge_1(U_data log_data)
{
    U_list *list_1 = S_List_init();
    int money;
    switch (log_data.grade)
    {
    case 2:
        S_List_File_scanf(list_1, REGULAR_FILE);
        break;
    case 3:
        S_List_File_scanf(list_1, SILVER_FILE);
        break;
    case 4:
        S_List_File_scanf(list_1, GOLD_FILE);
        break;
    case 5:
        S_List_File_scanf(list_1, PLATINUM_FILE);
        break;
    default:
        printf("你这人啊 ，满脑子都是自己呢！\n");
        break;
    }

    printf("请输入 充值 的余额 ：\n");
    U_node *L1=S_List_find_name(list_1,log_data.name);
    scanf("%d",&money);
    L1->data.value=L1->data.value+money;
    printf("充值成功！\n");
    switch (log_data.grade)
    {
        case 2:
            S_List_File_print(list_1,REGULAR_FILE);
            break;
        case 3:
            S_List_File_print(list_1,SILVER_FILE);
            break;
        case 4:
            S_List_File_print(list_1,GOLD_FILE);
            break;
        case 5:
            S_List_File_print(list_1,PLATINUM_FILE);
            break;
        default:
            printf("小猫，你可以吃 芝士汉堡！\n");
            break;
    }
    S_List_free(&list_1);
}

void Level_Modify()
{
    U_list *list = S_List_init();
    
    U_list *list_2 = S_List_init();
    U_list *list_3 = S_List_init();
    U_list *list_4 = S_List_init();
    U_list *list_5 = S_List_init();

    int num_2=0;
    int num_3=0;
    int num_4=0;
    int num_5=0;

    FlightSystem Flight_sys = Sys_init();
    // S_List_File_scanf(Flight_sys.ADMIN_USER,ADMIN_FILE);
    S_List_File_scanf(Flight_sys.REGULAR_USER,REGULAR_FILE);
    S_List_File_scanf(Flight_sys.SILVER_USER,SILVER_FILE);
    S_List_File_scanf(Flight_sys.GOLD_USER,GOLD_FILE);
    S_List_File_scanf(Flight_sys.PLATINUM_USER,PLATINUM_FILE);

    // list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    
    U_node *ptr=list->next;

    for (size_t i = 0; ptr!=NULL; i++)
    {
        if(ptr->data.value<30000 && ptr->data.value>=0)
        {
            num_2++;
            ptr->data.grade=2;
            S_List_insert(list_2,ptr->data,num_2);
        }
        if( ptr->data.value>=30000 && ptr->data.value<40000 )
        {
            num_3++;
            ptr->data.grade=3;
            S_List_insert(list_3,ptr->data,num_3);
        }
        if(ptr->data.value>=40000 && ptr->data.value<50000)
        {
            num_4++;
            ptr->data.grade=4;
            S_List_insert(list_4,ptr->data,num_4);
        }
        if(ptr->data.value>=50000)
        {
            num_5++;
            ptr->data.grade=5;
            S_List_insert(list_5,ptr->data,num_5);
        }
        ptr=ptr->next;
        if(ptr==list->next)
        {
            break;
        }
    }
    S_List_File_print(list_2,REGULAR_FILE);
    S_List_File_print(list_3,SILVER_FILE);
    S_List_File_print(list_4,GOLD_FILE);
    S_List_File_print(list_5,PLATINUM_FILE);

    S_List_free(&list);
    S_List_free(&list_2);
    S_List_free(&list_3);
    S_List_free(&list_4);
    S_List_free(&list_5);

}

//更改密码
void Change_Pwd()
{
    U_list *list = S_List_init();
    U_list *list_1 = S_List_init();
    char pwd[128];

    FlightSystem Flight_sys = Sys_init();
    // S_List_File_scanf(Flight_sys.ADMIN_USER,ADMIN_FILE);
    S_List_File_scanf(Flight_sys.REGULAR_USER,REGULAR_FILE);
    S_List_File_scanf(Flight_sys.SILVER_USER,SILVER_FILE);
    S_List_File_scanf(Flight_sys.GOLD_USER,GOLD_FILE);
    S_List_File_scanf(Flight_sys.PLATINUM_USER,PLATINUM_FILE);

    // list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    
    char user[128];
    printf("请输入你的名字：\n");
    scanf("%s",user);
    U_node *ptr= S_List_find_name(list,user);

    switch (ptr->data.grade)
    {
    case 2:
        S_List_File_scanf(list_1, REGULAR_FILE);
        break;
    case 3:
        S_List_File_scanf(list_1, SILVER_FILE);
        break;
    case 4:
        S_List_File_scanf(list_1, GOLD_FILE);
        break;
    case 5:
        S_List_File_scanf(list_1, PLATINUM_FILE);
        break;
    default:
        printf("你这人啊 ，满脑子都是自己呢！\n");
        break;
    }

    printf("请输入你的新密码：\n");
    U_node *L1=S_List_find_name(list_1,user);
    scanf("%s",pwd);
    strcpy(L1->data.passwd,pwd);
    puts("修改成功");
    switch (ptr->data.grade)
    {
        case 2:
            S_List_File_print(list_1,REGULAR_FILE);
            break;
        case 3:
            S_List_File_print(list_1,SILVER_FILE);
            break;
        case 4:
            S_List_File_print(list_1,GOLD_FILE);
            break;
        case 5:
            S_List_File_print(list_1,PLATINUM_FILE);
            break;
        default:
            printf("你可以吃 琼实鸟串：\n");
            break;
    }
    S_List_free(&list);
    S_List_free(&list_1);

}

//更改密码
void Change_Pwd_1(U_data log_data)
{
    //U_list *list = S_List_init();
    U_list *list_1 = S_List_init();
    char pwd[128];
    switch (log_data.grade)
    {
    case 2:
        S_List_File_scanf(list_1, REGULAR_FILE);
        break;
    case 3:
        S_List_File_scanf(list_1, SILVER_FILE);
        break;
    case 4:
        S_List_File_scanf(list_1, GOLD_FILE);
        break;
    case 5:
        S_List_File_scanf(list_1, PLATINUM_FILE);
        break;
    default:
        printf("你这人啊 ，满脑子都是自己呢！\n");
        break;
    }

    printf("请输入你的新密码：\n");
    U_node *ptr=S_List_find_name(list_1,log_data.name);
    scanf("%s",pwd);
    strcpy(ptr->data.passwd,pwd);
    puts("修改成功\n");
    switch (log_data.grade)
    {
        case 2:
            S_List_File_print(list_1,REGULAR_FILE);
            break;
        case 3:
            S_List_File_print(list_1,SILVER_FILE);
            break;
        case 4:
            S_List_File_print(list_1,GOLD_FILE);
            break;
        case 5:
            S_List_File_print(list_1,PLATINUM_FILE);
            break;
        default:
            printf("你可以吃 琼实鸟串：\n");
            break;
    }
   // S_List_free(&list);
    S_List_free(&list_1);

}

// 购票退票
void Tickets(F_list *Flight_list, U_data log_data)
{
    int num;
    int flight_id;
    // 读取用户的链表
    U_list *list = S_List_init();
    switch (log_data.grade)
    {
    case 2:
        S_List_File_scanf(list, REGULAR_FILE); // 普通用户·
        break;
    case 3:
        S_List_File_scanf(list, SILVER_FILE); // 银卡会员
        break;
    case 4:
        S_List_File_scanf(list, GOLD_FILE); // 金卡会员
        break;
    case 5:
        S_List_File_scanf(list, PLATINUM_FILE); // 白金会员
        break;
    }
    S_List_print(list);
    puts("购票：1，退票：2");
    scanf("%d", &num);

    if (num == 1)
    {
        puts("请输入要购买的航班场次");
        scanf("%d", &flight_id);
        F_node *data_flight = D_List_find_id(Flight_list, flight_id);
        if (data_flight == NULL)
        {
            printf("未找到航班 ID 为 %d 的航班\n", flight_id);
            return;
        }
        // 查找用户结点
        U_node *ptr = list->next;
        while (ptr != NULL)
        {
            if (strcmp(ptr->data.name, log_data.name) == 0)
            {
                ptr->data.value -= data_flight->data.value;
                data_flight->data.maxNUM--;
                ptr->data.ticket[ptr->data.ticket_num++] = data_flight->data;
            }
            ptr = ptr->next;
        }
        // 将修改的链表存入文件中
        switch (log_data.grade)
        {
        case 2:
            S_List_File_print(list, REGULAR_FILE); // 普通用户·
            break;
        case 3:
            S_List_File_print(list, SILVER_FILE); // 银卡会员
            break;
        case 4:
            S_List_File_print(list, GOLD_FILE); // 金卡会员
            break;
        case 5:
            S_List_File_print(list, PLATINUM_FILE); // 白金会员
            break;
        }
    }

    // 退票
    if (num == 2)
    {
        U_node *ptr = list->next;
        while (ptr != NULL)
        {
            if (strcmp(ptr->data.name, log_data.name) == 0)
            {
                ptr->data.value += ptr->data.ticket->value;
                F_node *data_flight = D_List_find_id(Flight_list, ptr->data.ticket->id);
                data_flight->data.maxNUM++;
                ptr->data.ticket_num--;
                printf("退票成功");
            }
            ptr = ptr->next;
        }
        // 将修改的链表存入文件中
        switch (log_data.grade)
        {
        case 2:
            S_List_File_print(list, REGULAR_FILE); // 普通用户·
            break;
        case 3:
            S_List_File_print(list, SILVER_FILE); // 银卡会员
            break;
        case 4:
            S_List_File_print(list, GOLD_FILE); // 金卡会员
            break;
        case 5:
            S_List_File_print(list, PLATINUM_FILE); // 白金会员
            break;
        }
    }
}

//我的订单
void My_Order(U_data log_data)
{
    U_list *list=S_List_init();
    printf("航班信息如下：\n");

    switch (log_data.grade)
    {
    case 2:
        S_List_File_scanf(list, REGULAR_FILE); // 普通用户·
        break;
    case 3:
        S_List_File_scanf(list, SILVER_FILE); // 银卡会员
        break;
    case 4:
        S_List_File_scanf(list, GOLD_FILE); // 金卡会员
        break;
    case 5:
        S_List_File_scanf(list, PLATINUM_FILE); // 白金会员
        break;
    }

    U_node *ptr=S_List_find_name(list,log_data.name);
    printf("航班信息如下\n");
    for (size_t i = 0; i < ptr->data.ticket_num; i++)
    {
           printf("%d\t",       ptr->data.ticket[i].id);
           printf("%s\t",       ptr->data.ticket[i].flighttype);
           printf("%s\t",       ptr->data.ticket[i].startcity);
           printf("%s\t",       ptr->data.ticket[i].arrivecity);
           printf("%d:%d\t",    ptr->data.ticket[i].starttime[0], ptr->data.ticket[i].starttime[1]);
           printf("%d:%d\t",    ptr->data.ticket[i].arrivetime[0], ptr->data.ticket[i].arrivetime[1]);
           printf("%s\t",       ptr->data.ticket[i].flytime);
           printf("%d\t",       ptr->data.ticket[i].value);
           printf("%d\t",       ptr->data.ticket[i].maxNUM);
           printf("%d\t",       ptr->data.ticket[i].leftbuyersa);
           printf("%c\t",       ptr->data.ticket[i].whetherfly);
           puts("");
    }
    S_List_free(&list);
}

//查看航班信息
void View_Flight()
{
    F_list *list=D_List_init();
    D_List_file_scanf(list);
    D_List_print(list);
    D_List_free(&list);

}

//注册用户
void User_Register()
{
    U_list *list=S_List_init();
    U_data user_data;
    printf("please enter your name:\n");
    scanf("%s",user_data.name);
    printf("please enter your password:\n");
    scanf("%s",user_data.passwd);
    user_data.grade=2;
    user_data.value=0;
    user_data.ticket_num=0;

    S_List_File_scanf(list,REGULAR_FILE);
    S_List_insert(list,user_data,1);
    S_List_File_print(list,REGULAR_FILE);
    printf("register success！");
    S_List_free(&list);
}